//正例
//option{ ignoreDifferentlyNamedParameters: true }
function f(a: number): void;
function f(b: string): void;
function f(a: number | string): void {}

function f(m: number): void;
function f(v: number, u: string): void;
function f(v: number, u?: string): void {}

function f(v: boolean): number;
function f(): string;

function f(v: boolean, u: boolean): number;
function f(v: boolean): string;

function f(v: number, u?: string): void {}
function f(v: number): void;
function f(): string;

function f(a: boolean, ...c: number[]): void;
function f(a: boolean, ...d: string[]): void;
function f(a: boolean, ...c: (number | string)[]): void {}

class C {
  constructor();
  constructor(a: number, b: number);
  constructor(c?: number, b?: number) {}

  a(): void;
  a(a: number, b: number): void;
  a(a?: number, d?: number): void {}
}


function f(a: number): void;
function f(b: string): void;